from sqlalchemy import Column, Integer, String, DateTime, JSON, func

from server.db.base import Base
from configs.other_config import HISTORY_MESSAGE_TABLE, LLM_MESSAGE_TABLE


class MessageModel(Base):
    """
    聊天记录模型
    """
    __tablename__ = LLM_MESSAGE_TABLE
    id = Column(String(32), primary_key=True, comment='聊天记录ID')
    conversation_id = Column(String(32), default=None, index=True, comment='对话框ID')
    # chat/agent_chat等
    chat_type = Column(String(50), comment='聊天类型')
    query = Column(String(4096), comment='用户问题')
    response = Column(String(4096), comment='模型回答')
    # 记录知识库id等，以便后续扩展
    meta_data = Column(JSON, default={})
    # 满分100 越高表示评价越好
    feedback_score = Column(Integer, default=-1, comment='用户评分')
    feedback_reason = Column(String(255), default="", comment='用户评分理由')
    create_time = Column(DateTime, default=func.now(), comment='创建时间')

    def __repr__(self):
        return f"<message(id='{self.id}', conversation_id='{self.conversation_id}', chat_type='{self.chat_type}', query='{self.query}', response='{self.response}',meta_data='{self.meta_data}',feedback_score='{self.feedback_score}',feedback_reason='{self.feedback_reason}', create_time='{self.create_time}')>"


class CustomMessageModel(Base):
    """
    自定义聊天记录模型
    """
    __tablename__ = HISTORY_MESSAGE_TABLE  # 历史聊天记录表名
    id = Column(Integer, primary_key=True, autoincrement=True, comment='主键递增ID')
    user_id = Column(String(64), index=True, comment='用户ID')
    conversation_id = Column(String(128), default=None, index=True, comment='对话ID')
    # chat/agent_chat等
    chat_type = Column(String(50), comment='聊天类型')
    query = Column(String(4096), comment='用户问题')
    response = Column(String(4096), comment='模型回答')
    instruction = Column(String(50), default="-1", comment='指令')
    knowledge_base_name = Column(String(50), default="", comment='知识库名称')
    create_time = Column(DateTime, default=func.now(), comment='创建时间')

    def __repr__(self):
        return f"<CustomMessageModel(id='{self.id}', user_id='{self.user_id}', conversation_id='{self.conversation_id}', chat_type='{self.chat_type}', query='{self.query}', response='{self.response}', instruction='{self.instruction}', knowledge_base_name='{self.knowledge_base_name}', create_time='{self.create_time}')>"
